Pilot data Parse bio 4 iPSC lines NPCs, 3 batches

Load libraries

library(Seurat)
The legacy packages maptools, rgdal, and rgeos, underpinning this package
will retire shortly. Please refer to R-spatial evolution reports on
https://r-spatial.org/r/2023/05/15/evolution4.html for details.
This package is now running under evolution status 0 
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Attaching SeuratObject
Warning message:
R graphics engine version 15 is not supported by this version of RStudio. The Plots tab will be disabled until a newer version of RStudio is installed. 
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ───────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.2     ✔ purrr   1.0.1
✔ tibble  3.2.1     ✔ dplyr   1.1.2
✔ tidyr   1.3.0     ✔ stringr 1.5.0
✔ readr   2.1.3     ✔ forcats 0.5.2
── Conflicts ──────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
seu
An object of class Seurat 
58395 features across 23769 samples within 1 assay 
Active assay: RNA (58395 features, 2500 variable features)
 2 dimensional reductions calculated: pca, umap

Idents(seu) <- 'sample'
VlnPlot(seu, pt.size = 0.001, features = c("nFeature_RNA"))
VlnPlot(seu, pt.size = 0.001, features = "nCount_RNA")

VlnPlot(seu, pt.size = 0.001, features = "percent.mt")

Add in labels for batch and disease status and line

#library("CelltypeR")
# CelltypeR library is a library I (Rhalena) made for flow cytometry but uses the seurat object and I made a quick add annotations function.

Seurat_Parse12sample <- seu

# here is the function
annotate <- function(seu, annotations, to_label, annotation_name = "CellType"){
  Idents(seu) <- to_label
  names(annotations) <- levels(seu)
  seu <- RenameIdents(seu, annotations)
  seu <- AddMetaData(object=seu, metadata=Idents(seu), col.name = annotation_name)

}

Idents(Seurat_Parse12sample) <- "sample"
sample.levels <- levels(Seurat_Parse12sample)
# should give the order of sample

# test
Seurat_Parse12sample <- annotate(Seurat_Parse12sample, annotations = sample.levels, to_label = "sample",annotation_name = "sample.test")
table(Seurat_Parse12sample$sample.test)

x2965B3 x2965B1  TD07B3 x3448B1 x3448B2  TD22B3  TD07B2 x3448B3 x2965B2 
   1918    2353    1690    2400    2194    2894    2124    1530    1686 
 TD07B1  TD22B2  TD22B1 
   1496    2186    1298 
table(Seurat_Parse12sample$sample)

 TD07B1  TD07B2  TD07B3  TD22B1  TD22B2  TD22B3 x2965B1 x2965B2 x2965B3 
   1496    2124    1690    1298    2186    2894    2353    1686    1918 
x3448B1 x3448B2 x3448B3 
   2400    2194    1530 
# these match

#input vector we got from the seurat object
# Define regular expression to match first part of the string
pattern <- "^[A-Za-z]+"

# Use gsub() to replace the first part of the string with an empty string
sample.levels.new <- gsub(pattern, "", sample.levels)

# Extract B1, B2, B3 from new vector
batch <- gsub(".*B", "B", sample.levels.new)

Seurat_Parse12sample <- annotate(Seurat_Parse12sample, annotations = batch, to_label = "sample",annotation_name = "Batch")

table(Seurat_Parse12sample$Batch)

  B3   B1   B2 
8032 7547 8190 
table(Seurat_Parse12sample$Batch,Seurat_Parse12sample$sample)
    
     TD07B1 TD07B2 TD07B3 TD22B1 TD22B2 TD22B3 x2965B1 x2965B2 x2965B3
  B3      0      0   1690      0      0   2894       0       0    1918
  B1   1496      0      0   1298      0      0    2353       0       0
  B2      0   2124      0      0   2186      0       0    1686       0
    
     x3448B1 x3448B2 x3448B3
  B3       0       0    1530
  B1    2400       0       0
  B2       0    2194       0
# add the cell line name
# sample vector is still the input vector
# Define regular expression to remove B1, B2, and B3
pattern <- "B[1-3]$"

# Use gsub() to remove B1, B2, and B3 from original vector
sample.levels.new <- gsub(pattern, "", sample.levels)

# Extract starting values from new vector
ipscline <- gsub("B[1-3]$", "", sample.levels.new)
ipscline
 [1] "x2965" "x2965" "TD07"  "x3448" "x3448" "TD22"  "TD07"  "x3448" "x2965"
[10] "TD07"  "TD22"  "TD22" 
Seurat_Parse12sample <- annotate(Seurat_Parse12sample, annotations = ipscline, to_label = "sample",annotation_name = "IPSC_Line")

table(Seurat_Parse12sample$IPSC_Line)

x2965  TD07 x3448  TD22 
 5957  5310  6124  6378 
table(Seurat_Parse12sample$IPSC_Line,Seurat_Parse12sample$sample)
       
        TD07B1 TD07B2 TD07B3 TD22B1 TD22B2 TD22B3 x2965B1 x2965B2 x2965B3
  x2965      0      0      0      0      0      0    2353    1686    1918
  TD07    1496   2124   1690      0      0      0       0       0       0
  x3448      0      0      0      0      0      0       0       0       0
  TD22       0      0      0   1298   2186   2894       0       0       0
       
        x3448B1 x3448B2 x3448B3
  x2965       0       0       0
  TD07        0       0       0
  x3448    2400    2194    1530
  TD22        0       0       0
# add disease status
# we need to know the order of the lines

Idents(Seurat_Parse12sample) <- "IPSC_Line"
line.levels <- levels(Seurat_Parse12sample)
line.levels
[1] "x2965" "TD07"  "x3448" "TD22" 
PDstatus <- c("PD","PD","Con","Con")  # if TD07 and 2965 are PD lines and TD22 and 3448 are control lines
Seurat_Parse12sample <- annotate(Seurat_Parse12sample, annotations = PDstatus, to_label = "IPSC_Line",annotation_name = "DiseaseStatus")

table(Seurat_Parse12sample$DiseaseStatus)

   PD   Con 
11267 12502 
 
table(Seurat_Parse12sample$DiseaseStatus,Seurat_Parse12sample$IPSC_Line)
     
      x2965 TD07 x3448 TD22
  PD   5957 5310     0    0
  Con     0    0  6124 6378
table(Seurat_Parse12sample$Batch,Seurat_Parse12sample$IPSC_Line)
    
     x2965 TD07 x3448 TD22
  B3  1918 1690  1530 2894
  B1  2353 1496  2400 1298
  B2  1686 2124  2194 2186

Save info

saveRDS(Seurat_Parse12sample, "Parse12sample4lines3batchJuly7.RDS")

Align the cell lines and batches, we will align across the 12 samples

# make a list of seurat objects by our cell type variable
sublist <- SplitObject(seu, split.by = "sample")
# normalize and find variable features
for (i in 1:length(sublist)){
  sublist[[i]] <- NormalizeData(sublist[[i]], verbose = FALSE)
  sublist[[i]] <- FindVariableFeatures(sublist[[i]], selection.method = "vst")
}
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# Create an empty Seurat object to store the integrated data
# Take the first Seurat object from the list as the starting point
integrated_seurat <- subset(sublist[[1]])


# Iterate over the list of Seurat objects
for (i in 1:length(sublist)) {
  # Rename the 'orig.ident' metadata inside the seurat object to match the object name in the list
  sublist[[i]]$orig.ident <- names(sublist)[i]

}

sample.list <- sublist
for (i in 1:length(sample.list)) {
  # Normalize and scale the data
  sample.list[[i]] <- NormalizeData(sample.list[[i]], verbose = FALSE)
  sample.list[[i]] <- ScaleData(sample.list[[i]], verbose = FALSE)
  # Find variable features
  sample.list[[i]] <- FindVariableFeatures(sample.list[[i]], selection.method = "vst")
  # Get the variable features
  variable_features <- VariableFeatures(sample.list[[i]])
  # Run PCA with the variable features
  sample.list[[i]] <- RunPCA(sample.list[[i]], verbose = FALSE, npcs = 30, features = variable_features)
}
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
int.anchors <- FindIntegrationAnchors(object.list = sample.list, dims = 1:30, reduction = "rpca")
Computing 2000 integration features
Scaling features for provided objects

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~05s          
  |+++++++++                                         | 17% ~04s          
  |+++++++++++++                                     | 25% ~03s          
  |+++++++++++++++++                                 | 33% ~03s          
  |+++++++++++++++++++++                             | 42% ~02s          
  |+++++++++++++++++++++++++                         | 50% ~02s          
  |++++++++++++++++++++++++++++++                    | 58% ~02s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s  
Computing within dataset neighborhoods

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~07s          
  |+++++++++                                         | 17% ~06s          
  |+++++++++++++                                     | 25% ~05s          
  |+++++++++++++++++                                 | 33% ~04s          
  |+++++++++++++++++++++                             | 42% ~04s          
  |+++++++++++++++++++++++++                         | 50% ~03s          
  |++++++++++++++++++++++++++++++                    | 58% ~03s          
  |++++++++++++++++++++++++++++++++++                | 67% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=06s  
Finding all pairwise anchors

  |                                                  | 0 % ~calculating  
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2868 anchors

  |+                                                 | 2 % ~03m 20s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 545 anchors

  |++                                                | 3 % ~03m 01s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 533 anchors

  |+++                                               | 5 % ~02m 54s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 558 anchors

  |++++                                              | 6 % ~02m 53s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 549 anchors

  |++++                                              | 8 % ~02m 56s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 424 anchors

  |+++++                                             | 9 % ~02m 50s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 467 anchors

  |++++++                                            | 11% ~02m 46s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 427 anchors

  |+++++++                                           | 12% ~02m 45s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 340 anchors

  |+++++++                                           | 14% ~02m 41s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 573 anchors

  |++++++++                                          | 15% ~02m 38s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 915 anchors

  |+++++++++                                         | 17% ~02m 38s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 912 anchors

  |++++++++++                                        | 18% ~02m 37s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 519 anchors

  |++++++++++                                        | 20% ~02m 34s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 766 anchors

  |+++++++++++                                       | 21% ~02m 33s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 738 anchors

  |++++++++++++                                      | 23% ~02m 31s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 531 anchors

  |+++++++++++++                                     | 24% ~02m 27s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 505 anchors

  |+++++++++++++                                     | 26% ~02m 24s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 464 anchors

  |++++++++++++++                                    | 27% ~02m 20s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 518 anchors

  |+++++++++++++++                                   | 29% ~02m 17s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 782 anchors

  |++++++++++++++++                                  | 30% ~02m 14s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 892 anchors

  |++++++++++++++++                                  | 32% ~02m 12s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 549 anchors

  |+++++++++++++++++                                 | 33% ~02m 09s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 493 anchors

  |++++++++++++++++++                                | 35% ~02m 05s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 432 anchors

  |+++++++++++++++++++                               | 36% ~02m 01s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2894 anchors

  |+++++++++++++++++++                               | 38% ~01m 58s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 569 anchors

  |++++++++++++++++++++                              | 39% ~01m 55s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 713 anchors

  |+++++++++++++++++++++                             | 41% ~01m 52s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 494 anchors

  |++++++++++++++++++++++                            | 42% ~01m 49s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 798 anchors

  |++++++++++++++++++++++                            | 44% ~01m 46s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 724 anchors

  |+++++++++++++++++++++++                           | 45% ~01m 43s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 398 anchors

  |++++++++++++++++++++++++                          | 47% ~01m 39s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 456 anchors

  |+++++++++++++++++++++++++                         | 48% ~01m 37s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 415 anchors

  |+++++++++++++++++++++++++                         | 50% ~01m 34s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 931 anchors

  |++++++++++++++++++++++++++                        | 52% ~01m 31s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 570 anchors

  |+++++++++++++++++++++++++++                       | 53% ~01m 28s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 419 anchors

  |++++++++++++++++++++++++++++                      | 55% ~01m 25s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 553 anchors

  |+++++++++++++++++++++++++++++                     | 56% ~01m 22s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 573 anchors

  |+++++++++++++++++++++++++++++                     | 58% ~01m 19s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2037 anchors

  |++++++++++++++++++++++++++++++                    | 59% ~01m 16s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 409 anchors

  |+++++++++++++++++++++++++++++++                   | 61% ~01m 13s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 413 anchors

  |++++++++++++++++++++++++++++++++                  | 62% ~01m 10s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 566 anchors

  |++++++++++++++++++++++++++++++++                  | 64% ~01m 07s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 472 anchors

  |+++++++++++++++++++++++++++++++++                 | 65% ~01m 04s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 401 anchors

  |++++++++++++++++++++++++++++++++++                | 67% ~01m 01s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 365 anchors

  |+++++++++++++++++++++++++++++++++++               | 68% ~58s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 847 anchors

  |+++++++++++++++++++++++++++++++++++               | 70% ~56s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 835 anchors

  |++++++++++++++++++++++++++++++++++++              | 71% ~53s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 475 anchors

  |+++++++++++++++++++++++++++++++++++++             | 73% ~50s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 772 anchors

  |++++++++++++++++++++++++++++++++++++++            | 74% ~47s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 740 anchors

  |++++++++++++++++++++++++++++++++++++++            | 76% ~45s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 3274 anchors

  |+++++++++++++++++++++++++++++++++++++++           | 77% ~42s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 796 anchors

  |++++++++++++++++++++++++++++++++++++++++          | 79% ~39s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 717 anchors

  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~37s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 811 anchors

  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~34s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 529 anchors

  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~31s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1402 anchors

  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~28s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1446 anchors

  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~25s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 530 anchors

  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~22s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 582 anchors

  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~19s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 443 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~17s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1047 anchors

  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~14s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 405 anchors

  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~11s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 483 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~08s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 595 anchors

  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~06s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 570 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++++| 98% ~03s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1021 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03m 01s
integrated_seurat <- IntegrateData(anchorset = int.anchors,  dims = 1:30)
Merging dataset 8 into 4
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 11 into 6
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 1 into 2
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 10 into 3
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 12 into 2 1
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 9 into 6 11
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 2 1 12 into 6 11 9
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 7 into 5
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 3 10 into 4 8
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 4 8 3 10 into 6 11 9 2 1 12
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 5 7 into 6 11 9 2 1 12 4 8 3 10
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
# 
# must set the k weight to the lowest cell count 
# in the parse sample we have over 1530 cells in the smallest count so we don't have to change the k from the 100 default

Now we need to run the workflow on the integrated object

DefaultAssay(integrated_seurat) <- "integrated"
integrated_seurat <- ScaleData(integrated_seurat, verbose = FALSE)
# only the integrated features will be the pca input

integrated_seurat <- RunPCA(integrated_seurat, npcs = 20, verbose = FALSE)
integrated_seurat <- RunUMAP(integrated_seurat, reduction = "pca", dims = 1:20, n.neighbors = 81)

Have a look at the new UMAP

DimPlot(integrated_seurat, group.by = 'sample')

DimPlot(integrated_seurat, group.by = 'Batch')

DimPlot(integrated_seurat, group.by = 'DiseaseStatus')

DimPlot(integrated_seurat, group.by = 'IPSC_Line')

NA
NA
NA
# saveRDS(integrated_seurat, "Integrated12samples.RDS")
# setwd("~/Documents/Data/scRNAseq/ParseExample/Experiment1-mini12")
intergrated_seurat <- readRDS("/Users/rhalenathomas/Documents/Data/scRNAseq/ParseExample/Experiment1-mini12/Integrated12samples.RDS")

Find new clusters

integrated_seurat <- FindClusters(integrated_seurat, resolution = c(0,0.3,0.6,1) )
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 23769
Number of edges: 3304295

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 1.0000
Number of communities: 1
Elapsed time: 16 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 23769
Number of edges: 3304295

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9097
Number of communities: 10
Elapsed time: 20 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 23769
Number of edges: 3304295

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8752
Number of communities: 16
Elapsed time: 23 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 23769
Number of edges: 3304295

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8382
Number of communities: 20
Elapsed time: 20 seconds

integrated_seurat <- intergrated_seurat
DimPlot(integrated_seurat, group.by = "integrated_snn_res.0.3")

DimPlot(integrated_seurat, group.by = "integrated_snn_res.0.6")

Annotate clusters res 0.3


Idents(integrated_seurat) <- "integrated_snn_res.0.3"
ClusterMarkers <- FindAllMarkers(integrated_seurat, only.pos = TRUE)
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+                                                 | 2 % ~18s          
  |++                                                | 3 % ~17s          
  |+++                                               | 5 % ~16s          
  |++++                                              | 6 % ~16s          
  |++++                                              | 8 % ~15s          
  |+++++                                             | 9 % ~15s          
  |++++++                                            | 11% ~15s          
  |+++++++                                           | 12% ~15s          
  |+++++++                                           | 14% ~14s          
  |++++++++                                          | 15% ~14s          
  |+++++++++                                         | 17% ~14s          
  |++++++++++                                        | 18% ~13s          
  |++++++++++                                        | 20% ~13s          
  |+++++++++++                                       | 22% ~13s          
  |++++++++++++                                      | 23% ~13s          
  |+++++++++++++                                     | 25% ~12s          
  |++++++++++++++                                    | 26% ~12s          
  |++++++++++++++                                    | 28% ~12s          
  |+++++++++++++++                                   | 29% ~12s          
  |++++++++++++++++                                  | 31% ~11s          
  |+++++++++++++++++                                 | 32% ~11s          
  |+++++++++++++++++                                 | 34% ~11s          
  |++++++++++++++++++                                | 35% ~11s          
  |+++++++++++++++++++                               | 37% ~10s          
  |++++++++++++++++++++                              | 38% ~10s          
  |++++++++++++++++++++                              | 40% ~10s          
  |+++++++++++++++++++++                             | 42% ~10s          
  |++++++++++++++++++++++                            | 43% ~09s          
  |+++++++++++++++++++++++                           | 45% ~09s          
  |++++++++++++++++++++++++                          | 46% ~09s          
  |++++++++++++++++++++++++                          | 48% ~08s          
  |+++++++++++++++++++++++++                         | 49% ~08s          
  |++++++++++++++++++++++++++                        | 51% ~08s          
  |+++++++++++++++++++++++++++                       | 52% ~08s          
  |+++++++++++++++++++++++++++                       | 54% ~07s          
  |++++++++++++++++++++++++++++                      | 55% ~07s          
  |+++++++++++++++++++++++++++++                     | 57% ~07s          
  |++++++++++++++++++++++++++++++                    | 58% ~07s          
  |++++++++++++++++++++++++++++++                    | 60% ~06s          
  |+++++++++++++++++++++++++++++++                   | 62% ~06s          
  |++++++++++++++++++++++++++++++++                  | 63% ~06s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~06s          
  |++++++++++++++++++++++++++++++++++                | 66% ~05s          
  |++++++++++++++++++++++++++++++++++                | 68% ~05s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~05s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~05s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~04s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~04s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~04s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~04s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=16s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |++                                                | 3 % ~06s          
  |+++                                               | 5 % ~05s          
  |++++                                              | 8 % ~10s          
  |++++++                                            | 11% ~08s          
  |+++++++                                           | 13% ~07s          
  |++++++++                                          | 16% ~06s          
  |++++++++++                                        | 18% ~06s          
  |+++++++++++                                       | 21% ~05s          
  |++++++++++++                                      | 24% ~05s          
  |++++++++++++++                                    | 26% ~05s          
  |+++++++++++++++                                   | 29% ~04s          
  |++++++++++++++++                                  | 32% ~04s          
  |++++++++++++++++++                                | 34% ~04s          
  |+++++++++++++++++++                               | 37% ~04s          
  |++++++++++++++++++++                              | 39% ~03s          
  |++++++++++++++++++++++                            | 42% ~03s          
  |+++++++++++++++++++++++                           | 45% ~03s          
  |++++++++++++++++++++++++                          | 47% ~03s          
  |+++++++++++++++++++++++++                         | 50% ~03s          
  |+++++++++++++++++++++++++++                       | 53% ~03s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |+++++++++++++++++++++++++++++                     | 58% ~02s          
  |+++++++++++++++++++++++++++++++                   | 61% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=05s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~36s          
  |++                                                | 2 % ~34s          
  |++                                                | 4 % ~33s          
  |+++                                               | 5 % ~32s          
  |++++                                              | 6 % ~32s          
  |++++                                              | 7 % ~31s          
  |+++++                                             | 8 % ~30s          
  |+++++                                             | 10% ~30s          
  |++++++                                            | 11% ~30s          
  |+++++++                                           | 12% ~29s          
  |+++++++                                           | 13% ~29s          
  |++++++++                                          | 14% ~28s          
  |++++++++                                          | 16% ~28s          
  |+++++++++                                         | 17% ~28s          
  |++++++++++                                        | 18% ~27s          
  |++++++++++                                        | 19% ~27s          
  |+++++++++++                                       | 20% ~26s          
  |+++++++++++                                       | 22% ~26s          
  |++++++++++++                                      | 23% ~25s          
  |+++++++++++++                                     | 24% ~25s          
  |+++++++++++++                                     | 25% ~24s          
  |++++++++++++++                                    | 27% ~24s          
  |++++++++++++++                                    | 28% ~24s          
  |+++++++++++++++                                   | 29% ~23s          
  |++++++++++++++++                                  | 30% ~23s          
  |++++++++++++++++                                  | 31% ~22s          
  |+++++++++++++++++                                 | 33% ~22s          
  |+++++++++++++++++                                 | 34% ~22s          
  |++++++++++++++++++                                | 35% ~21s          
  |+++++++++++++++++++                               | 36% ~21s          
  |+++++++++++++++++++                               | 37% ~21s          
  |++++++++++++++++++++                              | 39% ~21s          
  |++++++++++++++++++++                              | 40% ~20s          
  |+++++++++++++++++++++                             | 41% ~20s          
  |++++++++++++++++++++++                            | 42% ~19s          
  |++++++++++++++++++++++                            | 43% ~19s          
  |+++++++++++++++++++++++                           | 45% ~18s          
  |+++++++++++++++++++++++                           | 46% ~18s          
  |++++++++++++++++++++++++                          | 47% ~18s          
  |+++++++++++++++++++++++++                         | 48% ~17s          
  |+++++++++++++++++++++++++                         | 49% ~17s          
  |++++++++++++++++++++++++++                        | 51% ~16s          
  |++++++++++++++++++++++++++                        | 52% ~16s          
  |+++++++++++++++++++++++++++                       | 53% ~16s          
  |++++++++++++++++++++++++++++                      | 54% ~15s          
  |++++++++++++++++++++++++++++                      | 55% ~15s          
  |+++++++++++++++++++++++++++++                     | 57% ~14s          
  |+++++++++++++++++++++++++++++                     | 58% ~14s          
  |++++++++++++++++++++++++++++++                    | 59% ~13s          
  |+++++++++++++++++++++++++++++++                   | 60% ~13s          
  |+++++++++++++++++++++++++++++++                   | 61% ~13s          
  |++++++++++++++++++++++++++++++++                  | 63% ~12s          
  |++++++++++++++++++++++++++++++++                  | 64% ~12s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~11s          
  |++++++++++++++++++++++++++++++++++                | 66% ~11s          
  |++++++++++++++++++++++++++++++++++                | 67% ~11s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~10s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~10s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~09s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~08s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~08s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~07s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~07s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=32s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01m 09s      
  |++                                                | 2 % ~01m 08s      
  |++                                                | 3 % ~01m 07s      
  |+++                                               | 4 % ~01m 07s      
  |+++                                               | 5 % ~01m 06s      
  |++++                                              | 6 % ~01m 05s      
  |++++                                              | 7 % ~01m 05s      
  |+++++                                             | 8 % ~01m 04s      
  |+++++                                             | 9 % ~01m 03s      
  |++++++                                            | 10% ~01m 02s      
  |++++++                                            | 11% ~01m 02s      
  |+++++++                                           | 12% ~01m 01s      
  |+++++++                                           | 13% ~01m 00s      
  |++++++++                                          | 14% ~59s          
  |++++++++                                          | 15% ~59s          
  |+++++++++                                         | 16% ~58s          
  |+++++++++                                         | 18% ~57s          
  |++++++++++                                        | 19% ~57s          
  |++++++++++                                        | 20% ~56s          
  |+++++++++++                                       | 21% ~56s          
  |+++++++++++                                       | 22% ~55s          
  |++++++++++++                                      | 23% ~54s          
  |++++++++++++                                      | 24% ~53s          
  |+++++++++++++                                     | 25% ~53s          
  |+++++++++++++                                     | 26% ~52s          
  |++++++++++++++                                    | 27% ~51s          
  |++++++++++++++                                    | 28% ~51s          
  |+++++++++++++++                                   | 29% ~50s          
  |+++++++++++++++                                   | 30% ~49s          
  |++++++++++++++++                                  | 31% ~49s          
  |++++++++++++++++                                  | 32% ~48s          
  |+++++++++++++++++                                 | 33% ~47s          
  |++++++++++++++++++                                | 34% ~46s          
  |++++++++++++++++++                                | 35% ~46s          
  |+++++++++++++++++++                               | 36% ~45s          
  |+++++++++++++++++++                               | 37% ~44s          
  |++++++++++++++++++++                              | 38% ~43s          
  |++++++++++++++++++++                              | 39% ~43s          
  |+++++++++++++++++++++                             | 40% ~42s          
  |+++++++++++++++++++++                             | 41% ~41s          
  |++++++++++++++++++++++                            | 42% ~40s          
  |++++++++++++++++++++++                            | 43% ~40s          
  |+++++++++++++++++++++++                           | 44% ~39s          
  |+++++++++++++++++++++++                           | 45% ~38s          
  |++++++++++++++++++++++++                          | 46% ~38s          
  |++++++++++++++++++++++++                          | 47% ~37s          
  |+++++++++++++++++++++++++                         | 48% ~36s          
  |+++++++++++++++++++++++++                         | 49% ~35s          
  |++++++++++++++++++++++++++                        | 51% ~35s          
  |++++++++++++++++++++++++++                        | 52% ~34s          
  |+++++++++++++++++++++++++++                       | 53% ~33s          
  |+++++++++++++++++++++++++++                       | 54% ~32s          
  |++++++++++++++++++++++++++++                      | 55% ~32s          
  |++++++++++++++++++++++++++++                      | 56% ~31s          
  |+++++++++++++++++++++++++++++                     | 57% ~30s          
  |+++++++++++++++++++++++++++++                     | 58% ~30s          
  |++++++++++++++++++++++++++++++                    | 59% ~29s          
  |++++++++++++++++++++++++++++++                    | 60% ~28s          
  |+++++++++++++++++++++++++++++++                   | 61% ~27s          
  |+++++++++++++++++++++++++++++++                   | 62% ~27s          
  |++++++++++++++++++++++++++++++++                  | 63% ~26s          
  |++++++++++++++++++++++++++++++++                  | 64% ~25s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~25s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~24s          
  |++++++++++++++++++++++++++++++++++                | 67% ~23s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~22s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~22s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~21s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~20s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~19s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~19s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~18s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~17s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~17s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~16s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~15s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~14s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~14s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~13s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~12s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~12s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~11s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~09s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~09s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~08s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~07s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01m 09s
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~16s          
  |++                                                | 3 % ~16s          
  |+++                                               | 4 % ~16s          
  |+++                                               | 6 % ~16s          
  |++++                                              | 7 % ~15s          
  |+++++                                             | 9 % ~15s          
  |++++++                                            | 10% ~15s          
  |++++++                                            | 12% ~15s          
  |+++++++                                           | 13% ~14s          
  |++++++++                                          | 15% ~14s          
  |+++++++++                                         | 16% ~14s          
  |+++++++++                                         | 18% ~14s          
  |++++++++++                                        | 19% ~14s          
  |+++++++++++                                       | 21% ~13s          
  |++++++++++++                                      | 22% ~13s          
  |++++++++++++                                      | 24% ~13s          
  |+++++++++++++                                     | 25% ~12s          
  |++++++++++++++                                    | 27% ~12s          
  |+++++++++++++++                                   | 28% ~12s          
  |+++++++++++++++                                   | 30% ~12s          
  |++++++++++++++++                                  | 31% ~11s          
  |+++++++++++++++++                                 | 33% ~11s          
  |++++++++++++++++++                                | 34% ~11s          
  |++++++++++++++++++                                | 36% ~11s          
  |+++++++++++++++++++                               | 37% ~10s          
  |++++++++++++++++++++                              | 39% ~10s          
  |+++++++++++++++++++++                             | 40% ~10s          
  |+++++++++++++++++++++                             | 42% ~10s          
  |++++++++++++++++++++++                            | 43% ~09s          
  |+++++++++++++++++++++++                           | 45% ~09s          
  |++++++++++++++++++++++++                          | 46% ~09s          
  |++++++++++++++++++++++++                          | 48% ~09s          
  |+++++++++++++++++++++++++                         | 49% ~08s          
  |++++++++++++++++++++++++++                        | 51% ~08s          
  |+++++++++++++++++++++++++++                       | 52% ~08s          
  |+++++++++++++++++++++++++++                       | 54% ~08s          
  |++++++++++++++++++++++++++++                      | 55% ~07s          
  |+++++++++++++++++++++++++++++                     | 57% ~07s          
  |++++++++++++++++++++++++++++++                    | 58% ~07s          
  |++++++++++++++++++++++++++++++                    | 60% ~07s          
  |+++++++++++++++++++++++++++++++                   | 61% ~06s          
  |++++++++++++++++++++++++++++++++                  | 63% ~06s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~06s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~06s          
  |++++++++++++++++++++++++++++++++++                | 67% ~05s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~05s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~05s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~05s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~04s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~04s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=17s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~32s          
  |++                                                | 2 % ~32s          
  |++                                                | 4 % ~31s          
  |+++                                               | 5 % ~31s          
  |++++                                              | 6 % ~30s          
  |++++                                              | 7 % ~30s          
  |+++++                                             | 8 % ~29s          
  |+++++                                             | 10% ~29s          
  |++++++                                            | 11% ~29s          
  |+++++++                                           | 12% ~28s          
  |+++++++                                           | 13% ~28s          
  |++++++++                                          | 14% ~27s          
  |++++++++                                          | 16% ~27s          
  |+++++++++                                         | 17% ~27s          
  |++++++++++                                        | 18% ~26s          
  |++++++++++                                        | 19% ~26s          
  |+++++++++++                                       | 20% ~25s          
  |+++++++++++                                       | 22% ~25s          
  |++++++++++++                                      | 23% ~25s          
  |+++++++++++++                                     | 24% ~24s          
  |+++++++++++++                                     | 25% ~24s          
  |++++++++++++++                                    | 27% ~23s          
  |++++++++++++++                                    | 28% ~23s          
  |+++++++++++++++                                   | 29% ~23s          
  |++++++++++++++++                                  | 30% ~22s          
  |++++++++++++++++                                  | 31% ~22s          
  |+++++++++++++++++                                 | 33% ~22s          
  |+++++++++++++++++                                 | 34% ~21s          
  |++++++++++++++++++                                | 35% ~21s          
  |+++++++++++++++++++                               | 36% ~20s          
  |+++++++++++++++++++                               | 37% ~20s          
  |++++++++++++++++++++                              | 39% ~20s          
  |++++++++++++++++++++                              | 40% ~19s          
  |+++++++++++++++++++++                             | 41% ~19s          
  |++++++++++++++++++++++                            | 42% ~18s          
  |++++++++++++++++++++++                            | 43% ~18s          
  |+++++++++++++++++++++++                           | 45% ~18s          
  |+++++++++++++++++++++++                           | 46% ~17s          
  |++++++++++++++++++++++++                          | 47% ~17s          
  |+++++++++++++++++++++++++                         | 48% ~17s          
  |+++++++++++++++++++++++++                         | 49% ~16s          
  |++++++++++++++++++++++++++                        | 51% ~16s          
  |++++++++++++++++++++++++++                        | 52% ~15s          
  |+++++++++++++++++++++++++++                       | 53% ~15s          
  |++++++++++++++++++++++++++++                      | 54% ~15s          
  |++++++++++++++++++++++++++++                      | 55% ~14s          
  |+++++++++++++++++++++++++++++                     | 57% ~14s          
  |+++++++++++++++++++++++++++++                     | 58% ~13s          
  |++++++++++++++++++++++++++++++                    | 59% ~13s          
  |+++++++++++++++++++++++++++++++                   | 60% ~13s          
  |+++++++++++++++++++++++++++++++                   | 61% ~12s          
  |++++++++++++++++++++++++++++++++                  | 63% ~12s          
  |++++++++++++++++++++++++++++++++                  | 64% ~12s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~11s          
  |++++++++++++++++++++++++++++++++++                | 66% ~11s          
  |++++++++++++++++++++++++++++++++++                | 67% ~10s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~10s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~10s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~08s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~08s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~08s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~07s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~07s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=32s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~37s          
  |++                                                | 2 % ~36s          
  |++                                                | 3 % ~35s          
  |+++                                               | 4 % ~35s          
  |+++                                               | 5 % ~34s          
  |++++                                              | 6 % ~34s          
  |++++                                              | 7 % ~33s          
  |+++++                                             | 9 % ~33s          
  |+++++                                             | 10% ~33s          
  |++++++                                            | 11% ~32s          
  |++++++                                            | 12% ~32s          
  |+++++++                                           | 13% ~31s          
  |+++++++                                           | 14% ~31s          
  |++++++++                                          | 15% ~31s          
  |++++++++                                          | 16% ~30s          
  |+++++++++                                         | 17% ~30s          
  |++++++++++                                        | 18% ~29s          
  |++++++++++                                        | 19% ~29s          
  |+++++++++++                                       | 20% ~29s          
  |+++++++++++                                       | 21% ~28s          
  |++++++++++++                                      | 22% ~28s          
  |++++++++++++                                      | 23% ~27s          
  |+++++++++++++                                     | 24% ~27s          
  |+++++++++++++                                     | 26% ~27s          
  |++++++++++++++                                    | 27% ~26s          
  |++++++++++++++                                    | 28% ~26s          
  |+++++++++++++++                                   | 29% ~26s          
  |+++++++++++++++                                   | 30% ~25s          
  |++++++++++++++++                                  | 31% ~25s          
  |++++++++++++++++                                  | 32% ~24s          
  |+++++++++++++++++                                 | 33% ~24s          
  |++++++++++++++++++                                | 34% ~24s          
  |++++++++++++++++++                                | 35% ~23s          
  |+++++++++++++++++++                               | 36% ~23s          
  |+++++++++++++++++++                               | 37% ~23s          
  |++++++++++++++++++++                              | 38% ~22s          
  |++++++++++++++++++++                              | 39% ~22s          
  |+++++++++++++++++++++                             | 40% ~21s          
  |+++++++++++++++++++++                             | 41% ~21s          
  |++++++++++++++++++++++                            | 43% ~21s          
  |++++++++++++++++++++++                            | 44% ~20s          
  |+++++++++++++++++++++++                           | 45% ~20s          
  |+++++++++++++++++++++++                           | 46% ~19s          
  |++++++++++++++++++++++++                          | 47% ~19s          
  |++++++++++++++++++++++++                          | 48% ~19s          
  |+++++++++++++++++++++++++                         | 49% ~18s          
  |+++++++++++++++++++++++++                         | 50% ~18s          
  |++++++++++++++++++++++++++                        | 51% ~18s          
  |+++++++++++++++++++++++++++                       | 52% ~17s          
  |+++++++++++++++++++++++++++                       | 53% ~17s          
  |++++++++++++++++++++++++++++                      | 54% ~16s          
  |++++++++++++++++++++++++++++                      | 55% ~16s          
  |+++++++++++++++++++++++++++++                     | 56% ~16s          
  |+++++++++++++++++++++++++++++                     | 57% ~15s          
  |++++++++++++++++++++++++++++++                    | 59% ~15s          
  |++++++++++++++++++++++++++++++                    | 60% ~15s          
  |+++++++++++++++++++++++++++++++                   | 61% ~14s          
  |+++++++++++++++++++++++++++++++                   | 62% ~14s          
  |++++++++++++++++++++++++++++++++                  | 63% ~13s          
  |++++++++++++++++++++++++++++++++                  | 64% ~13s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~13s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~12s          
  |++++++++++++++++++++++++++++++++++                | 67% ~12s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~11s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~11s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~11s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~10s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~10s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~10s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~09s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~09s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~08s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~08s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~08s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~07s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=36s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~59s          
  |++                                                | 2 % ~58s          
  |++                                                | 4 % ~57s          
  |+++                                               | 5 % ~56s          
  |+++                                               | 6 % ~56s          
  |++++                                              | 7 % ~55s          
  |+++++                                             | 8 % ~54s          
  |+++++                                             | 9 % ~53s          
  |++++++                                            | 11% ~52s          
  |++++++                                            | 12% ~52s          
  |+++++++                                           | 13% ~51s          
  |++++++++                                          | 14% ~50s          
  |++++++++                                          | 15% ~50s          
  |+++++++++                                         | 16% ~49s          
  |+++++++++                                         | 18% ~48s          
  |++++++++++                                        | 19% ~48s          
  |++++++++++                                        | 20% ~47s          
  |+++++++++++                                       | 21% ~46s          
  |++++++++++++                                      | 22% ~46s          
  |++++++++++++                                      | 24% ~45s          
  |+++++++++++++                                     | 25% ~44s          
  |+++++++++++++                                     | 26% ~43s          
  |++++++++++++++                                    | 27% ~43s          
  |+++++++++++++++                                   | 28% ~42s          
  |+++++++++++++++                                   | 29% ~41s          
  |++++++++++++++++                                  | 31% ~41s          
  |++++++++++++++++                                  | 32% ~40s          
  |+++++++++++++++++                                 | 33% ~39s          
  |++++++++++++++++++                                | 34% ~39s          
  |++++++++++++++++++                                | 35% ~38s          
  |+++++++++++++++++++                               | 36% ~37s          
  |+++++++++++++++++++                               | 38% ~37s          
  |++++++++++++++++++++                              | 39% ~36s          
  |++++++++++++++++++++                              | 40% ~35s          
  |+++++++++++++++++++++                             | 41% ~35s          
  |++++++++++++++++++++++                            | 42% ~34s          
  |++++++++++++++++++++++                            | 44% ~33s          
  |+++++++++++++++++++++++                           | 45% ~33s          
  |+++++++++++++++++++++++                           | 46% ~32s          
  |++++++++++++++++++++++++                          | 47% ~31s          
  |+++++++++++++++++++++++++                         | 48% ~31s          
  |+++++++++++++++++++++++++                         | 49% ~30s          
  |++++++++++++++++++++++++++                        | 51% ~29s          
  |++++++++++++++++++++++++++                        | 52% ~28s          
  |+++++++++++++++++++++++++++                       | 53% ~28s          
  |++++++++++++++++++++++++++++                      | 54% ~27s          
  |++++++++++++++++++++++++++++                      | 55% ~26s          
  |+++++++++++++++++++++++++++++                     | 56% ~26s          
  |+++++++++++++++++++++++++++++                     | 58% ~25s          
  |++++++++++++++++++++++++++++++                    | 59% ~24s          
  |++++++++++++++++++++++++++++++                    | 60% ~24s          
  |+++++++++++++++++++++++++++++++                   | 61% ~23s          
  |++++++++++++++++++++++++++++++++                  | 62% ~22s          
  |++++++++++++++++++++++++++++++++                  | 64% ~21s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~21s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~20s          
  |++++++++++++++++++++++++++++++++++                | 67% ~19s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~19s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~18s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~17s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~17s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~16s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~15s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~15s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~14s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~13s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~12s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~12s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~11s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~10s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~09s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~08s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=59s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01m 02s      
  |++                                                | 2 % ~59s          
  |++                                                | 4 % ~57s          
  |+++                                               | 5 % ~56s          
  |++++                                              | 6 % ~55s          
  |++++                                              | 7 % ~55s          
  |+++++                                             | 9 % ~54s          
  |+++++                                             | 10% ~53s          
  |++++++                                            | 11% ~53s          
  |+++++++                                           | 12% ~52s          
  |+++++++                                           | 13% ~51s          
  |++++++++                                          | 15% ~50s          
  |++++++++                                          | 16% ~50s          
  |+++++++++                                         | 17% ~49s          
  |++++++++++                                        | 18% ~48s          
  |++++++++++                                        | 20% ~47s          
  |+++++++++++                                       | 21% ~46s          
  |+++++++++++                                       | 22% ~46s          
  |++++++++++++                                      | 23% ~45s          
  |+++++++++++++                                     | 24% ~44s          
  |+++++++++++++                                     | 26% ~44s          
  |++++++++++++++                                    | 27% ~43s          
  |+++++++++++++++                                   | 28% ~42s          
  |+++++++++++++++                                   | 29% ~41s          
  |++++++++++++++++                                  | 30% ~41s          
  |++++++++++++++++                                  | 32% ~40s          
  |+++++++++++++++++                                 | 33% ~39s          
  |++++++++++++++++++                                | 34% ~38s          
  |++++++++++++++++++                                | 35% ~38s          
  |+++++++++++++++++++                               | 37% ~37s          
  |+++++++++++++++++++                               | 38% ~36s          
  |++++++++++++++++++++                              | 39% ~35s          
  |+++++++++++++++++++++                             | 40% ~35s          
  |+++++++++++++++++++++                             | 41% ~34s          
  |++++++++++++++++++++++                            | 43% ~33s          
  |++++++++++++++++++++++                            | 44% ~33s          
  |+++++++++++++++++++++++                           | 45% ~32s          
  |++++++++++++++++++++++++                          | 46% ~31s          
  |++++++++++++++++++++++++                          | 48% ~31s          
  |+++++++++++++++++++++++++                         | 49% ~30s          
  |+++++++++++++++++++++++++                         | 50% ~29s          
  |++++++++++++++++++++++++++                        | 51% ~28s          
  |+++++++++++++++++++++++++++                       | 52% ~28s          
  |+++++++++++++++++++++++++++                       | 54% ~27s          
  |++++++++++++++++++++++++++++                      | 55% ~26s          
  |+++++++++++++++++++++++++++++                     | 56% ~25s          
  |+++++++++++++++++++++++++++++                     | 57% ~25s          
  |++++++++++++++++++++++++++++++                    | 59% ~24s          
  |++++++++++++++++++++++++++++++                    | 60% ~23s          
  |+++++++++++++++++++++++++++++++                   | 61% ~23s          
  |++++++++++++++++++++++++++++++++                  | 62% ~22s          
  |++++++++++++++++++++++++++++++++                  | 63% ~21s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~20s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~20s          
  |++++++++++++++++++++++++++++++++++                | 67% ~19s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~18s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~18s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~17s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~16s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~15s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~15s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~14s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~13s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~13s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~12s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~11s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~09s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=57s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~33s          
  |++                                                | 2 % ~32s          
  |++                                                | 3 % ~31s          
  |+++                                               | 5 % ~31s          
  |+++                                               | 6 % ~30s          
  |++++                                              | 7 % ~30s          
  |+++++                                             | 8 % ~29s          
  |+++++                                             | 9 % ~29s          
  |++++++                                            | 10% ~28s          
  |++++++                                            | 12% ~28s          
  |+++++++                                           | 13% ~28s          
  |+++++++                                           | 14% ~27s          
  |++++++++                                          | 15% ~27s          
  |+++++++++                                         | 16% ~27s          
  |+++++++++                                         | 17% ~26s          
  |++++++++++                                        | 19% ~26s          
  |++++++++++                                        | 20% ~25s          
  |+++++++++++                                       | 21% ~25s          
  |++++++++++++                                      | 22% ~25s          
  |++++++++++++                                      | 23% ~24s          
  |+++++++++++++                                     | 24% ~24s          
  |+++++++++++++                                     | 26% ~24s          
  |++++++++++++++                                    | 27% ~23s          
  |++++++++++++++                                    | 28% ~23s          
  |+++++++++++++++                                   | 29% ~23s          
  |++++++++++++++++                                  | 30% ~22s          
  |++++++++++++++++                                  | 31% ~22s          
  |+++++++++++++++++                                 | 33% ~22s          
  |+++++++++++++++++                                 | 34% ~21s          
  |++++++++++++++++++                                | 35% ~21s          
  |+++++++++++++++++++                               | 36% ~20s          
  |+++++++++++++++++++                               | 37% ~20s          
  |++++++++++++++++++++                              | 38% ~20s          
  |++++++++++++++++++++                              | 40% ~19s          
  |+++++++++++++++++++++                             | 41% ~19s          
  |+++++++++++++++++++++                             | 42% ~19s          
  |++++++++++++++++++++++                            | 43% ~18s          
  |+++++++++++++++++++++++                           | 44% ~18s          
  |+++++++++++++++++++++++                           | 45% ~17s          
  |++++++++++++++++++++++++                          | 47% ~17s          
  |++++++++++++++++++++++++                          | 48% ~17s          
  |+++++++++++++++++++++++++                         | 49% ~16s          
  |+++++++++++++++++++++++++                         | 50% ~16s          
  |++++++++++++++++++++++++++                        | 51% ~16s          
  |+++++++++++++++++++++++++++                       | 52% ~15s          
  |+++++++++++++++++++++++++++                       | 53% ~15s          
  |++++++++++++++++++++++++++++                      | 55% ~14s          
  |++++++++++++++++++++++++++++                      | 56% ~14s          
  |+++++++++++++++++++++++++++++                     | 57% ~14s          
  |++++++++++++++++++++++++++++++                    | 58% ~13s          
  |++++++++++++++++++++++++++++++                    | 59% ~13s          
  |+++++++++++++++++++++++++++++++                   | 60% ~13s          
  |+++++++++++++++++++++++++++++++                   | 62% ~12s          
  |++++++++++++++++++++++++++++++++                  | 63% ~12s          
  |++++++++++++++++++++++++++++++++                  | 64% ~11s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~11s          
  |++++++++++++++++++++++++++++++++++                | 66% ~11s          
  |++++++++++++++++++++++++++++++++++                | 67% ~10s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~10s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~10s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~09s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~09s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~08s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~08s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~07s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~07s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=32s  
library(enrichR)
setEnrichrSite("Enrichr") # Human genes
# list of all the databases
# get the possible libraries
dbs <- listEnrichrDbs()

# this will list the possible libraries
dbs

# select libraries with cell types
db <- c('CellMarker_Augmented_2021','Azimuth_Cell_Types_2021')

# function for a quick look
checkCelltypes <- function(cluster_num = 0){
  clusterX <- ClusterMarkers %>% filter(cluster == cluster_num & avg_log2FC > 0.25)
  genes <- clusterX$gene
  # the cell type libraries
  # get the results for each library
  clusterX.cell <- enrichr(genes, databases = db)
  # visualize the results
print(plotEnrich(clusterX.cell[[1]], showTerms = 20, numChar = 40, y = "Count", orderBy = "P.value", title = 'CellMarker_Augmented_2021'))
print(plotEnrich(clusterX.cell[[2]], showTerms = 20, numChar = 40, y = "Count", orderBy = "P.value", title = 'Azimuth_Cell_Types_2021'))

}

Check each cluster quickly

checkCelltypes(cluster_num = 9)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

Look at some expression lists


da_neurons <- c("TH","SLC6A3","SLC18A2","SOX6","NDNF","SNCG","ALDH1A1","CALB1","TACR2","SLC17A6","SLC32A1","OTX2","GRP","LPL","CCK","VIP")
NPC_orStemLike <- c("DCX","NEUROD1","TBR1","PCNA","MKI67","SOX2","NES","PAX6","MASH1")
mature_neurons = c("RBFOX3","SYP","DLG45","VAMP1","VAMP2","TUBB3","SYT1","BSN","HOMER1","SLC17A6")
excitatory_neurons = c("GRIA2","GRIA1","GRIA4","GRIN1","GRIN2B","GRIN2A","GRIN3A","GRIN3","GRIP1","CAMK2A")
inhbitory_neurons = inh = c("GAD1","GAD2", "GAT1","PVALB","GABR2","GABR1","GBRR1","GABRB2","GABRB1","GABRB3","GABRA6","GABRA1","GABRA4","TRAK2")
astrocytes <- c("GFAP","S100B","AQP4","APOE", "SOX9","SLC1A3")
oligodendrocytes <- c("MBP","MOG","OLIG1","OLIG2","SOX10")
opc <- 
radial_glia <- c("PTPRC","AIF1","ADGRE1", "VIM", "TNC","PTPRZ1","FAM107A","HOPX","LIFR",
              "ITGB5","IL6ST","SLC1A3")
epithelial <- c("HES1","HES5","SOX2","SOX10","NES","CDH1","NOTCH1")

microglia <- c("IBA1","P2RY12","P2RY13","TREM119", "GPR34","SIGLECH","TREM2",
               "CX3CR1","FCRLS","OLFML3","HEXB","TGFBR1", "SALL1","MERTK",
               "PROS1")

features_list <- c("MKI67","SOX2","POU5F1","DLX2","PAX6","SOX9","HES1","NES","RBFOX3","MAP2","NCAM1","CD24","GRIA2","GRIN2B","GABBR1","GAD1","GAD2","GABRA1","GABRB2","TH","ALDH1A1","LMX1B","NR4A2","CORIN","CALB1","KCNJ6","CXCR4","ITGA6","SLC1A3","CD44","AQP4","S100B", "PDGFRA","OLIG2","MBP","CLDN11","VIM","VCAM1")

short_list <- c("MKI67","SOX9","HES1","NES","DLX2","RBFOX3","MAP2","TH","CALB1","KCNJ6","SLC1A3","CD44","AQP4","S100B","OLIG2","MBP","VIM")
Idents(integrated_seurat) <- "integrated_snn_res.0.3"

for (i in da_neurons) {
  print(FeaturePlot(integrated_seurat, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning: Could not find TH in the default search locations, found in RNA assay instead
Warning: Could not find SLC6A3 in the default search locations, found in RNA assay instead
Warning: Could not find SLC18A2 in the default search locations, found in RNA assay instead
Warning: Could not find SNCG in the default search locations, found in RNA assay instead
Warning: Could not find ALDH1A1 in the default search locations, found in RNA assay instead
Warning: Could not find TACR2 in the default search locations, found in RNA assay instead
Warning: Could not find SLC32A1 in the default search locations, found in RNA assay instead
Warning: Could not find OTX2 in the default search locations, found in RNA assay instead
Warning: Could not find GRP in the default search locations, found in RNA assay instead
Warning: Could not find CCK in the default search locations, found in RNA assay instead
Warning: Could not find VIP in the default search locations, found in RNA assay instead

Idents(integrated_seurat) <- "integrated_snn_res.0.3"

for (i in NPC_orStemLike) {
  print(FeaturePlot(integrated_seurat, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning: Could not find PCNA in the default search locations, found in RNA assay instead
Warning: Could not find SOX2 in the default search locations, found in RNA assay instead
Warning: Could not find NES in the default search locations, found in RNA assay instead
Warning in FetchData.Seurat(object = object, vars = c(dims, "ident", features),  :
  The following requested variables were not found: MASH1
Error: None of the requested features were found: MASH1 in slot data

Idents(integrated_seurat) <- "integrated_snn_res.0.3"

for (i in astrocytes) {
  print(FeaturePlot(integrated_seurat, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning: Could not find GFAP in the default search locations, found in RNA assay instead
Warning: Could not find S100B in the default search locations, found in RNA assay instead
Warning: Could not find AQP4 in the default search locations, found in RNA assay instead
Warning: Could not find APOE in the default search locations, found in RNA assay instead
Warning: Could not find SOX9 in the default search locations, found in RNA assay instead

Idents(integrated_seurat) <- "integrated_snn_res.0.3"

for (i in radial_glia) {
  print(FeaturePlot(integrated_seurat, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning: Could not find PTPRC in the default search locations, found in RNA assay instead
Warning: Could not find AIF1 in the default search locations, found in RNA assay instead
Warning: Could not find ADGRE1 in the default search locations, found in RNA assay instead
Warning: Could not find VIM in the default search locations, found in RNA assay instead
Warning: Could not find PTPRZ1 in the default search locations, found in RNA assay instead
Warning: Could not find FAM107A in the default search locations, found in RNA assay instead
Warning: Could not find HOPX in the default search locations, found in RNA assay instead
Warning: Could not find ITGB5 in the default search locations, found in RNA assay instead
Warning: Could not find IL6ST in the default search locations, found in RNA assay instead

Idents(integrated_seurat) <- "integrated_snn_res.0.3"

for (i in mature_neurons) {
  print(FeaturePlot(integrated_seurat, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning: Could not find SYP in the default search locations, found in RNA assay instead
Warning in FetchData.Seurat(object = object, vars = c(dims, "ident", features),  :
  The following requested variables were not found: DLG45
Error: None of the requested features were found: DLG45 in slot data


Idents(integrated_seurat) <- "integrated_snn_res.0.3"

for (i in excitatory_neurons) {
  print(FeaturePlot(integrated_seurat, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning: Could not find GRIN1 in the default search locations, found in RNA assay instead
Warning in FetchData.Seurat(object = object, vars = c(dims, "ident", features),  :
  The following requested variables were not found: GRIN3
Error: None of the requested features were found: GRIN3 in slot data

Add annotations - first pass NPC-stem NPC-glia NPC-SOX6 Neurons-Glut Progenitors-div NPC-SOX2-OXT-fibro Neural-Stem stem cell Neuron-GABA Neuron-epithelial


celltypes2 <- c("NPC","NPC","NPC","Neurons","Progenitors",
                "NPC","NPC","Stem","Neurons","Epithelial")  
integrated_seurat <- annotate(integrated_seurat, annotations = celltypes2, to_label = "integrated_snn_res.0.3",annotation_name = "Celltypes2")

DimPlot(integrated_seurat, label = TRUE)



DimPlot(integrated_seurat, split.by = "DiseaseStatus")

DimPlot(integrated_seurat, split.by = "DiseaseStatus", group.by = "Celltypes1")

NA
NA
celltypes3 <- c("NPC","NPC","NPC","Neurons","NPC-div",
                "Neuro-NPC","Neural-Stem","Stem","Neurons","Neural-epi")  
integrated_seurat <- annotate(integrated_seurat, annotations = celltypes3, to_label = "integrated_snn_res.0.3",annotation_name = "Celltypes3")

DimPlot(integrated_seurat, label = TRUE)

DEG in cell types 3 groups

Idents(integrated_seurat) <- "Celltypes3"
seu_sub <- subset(integrated_seurat, idents = "Neurons")
seu_sub <- ScaleData(seu_sub)
Centering and scaling data matrix

  |                                                                          
  |                                                                    |   0%
  |                                                                          
  |==================================                                  |  50%
  |                                                                          
  |====================================================================| 100%
seu_sub <- NormalizeData(seu_sub)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Error: Cannot add a different number of cells than already present
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKUGlsb3QgZGF0YSBQYXJzZSBiaW8gNCBpUFNDIGxpbmVzIE5QQ3MsIDMgYmF0Y2hlcwoKTG9hZCBsaWJyYXJpZXMKYGBge3J9CmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KHRpZHl2ZXJzZSkKCmBgYAoKCmBgYHtyfQoKIyByZWFkIGluIHRoZSBkYXRhCiMgb3V0cHV0IGZyb20gUGFyc2UgYmlvIHBpcGVsaW5lIGFkYXB0ZWQgYnkgU2FlaWQKIyBydW4gYnkgVGF5bG9yCiMgZGF0YSBvYmplY3QgbWFkZSBieSBUYXlsb3IKc2V1IDwtIHJlYWRSRFMoIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL1BhcnNlRXhhbXBsZS9FeHBlcmltZW50MS1taW5pMTIvU2V1cmF0X1BhcnNlMTJzYW1wbGUuUkRTIikKCiMgdGhpcyBkYXRhIG9iamVjdCBoYXMgbm90IGJlZW4gZmlsdGVyZWQKIyBpdCBkb2VzIGhhdmUgUENBIGFuZCB2YXJpYWJsZSBmZWF0dXJlcwpzZXUKCmBgYApgYGB7cn0KCnNldVtbInBlcmNlbnQubXQiXV0gPC0gUGVyY2VudGFnZUZlYXR1cmVTZXQoc2V1LCBwYXR0ZXJuID0gIl5NVC0iKQpJZGVudHMoc2V1KSA8LSAnb3JpZy5pZGVudCcKcGxvdCA8LSBWbG5QbG90KHNldSwgcHQuc2l6ZSA9IDAuMDAxLCBmZWF0dXJlcyA9IGMoIm5GZWF0dXJlX1JOQSIsICJuQ291bnRfUk5BIiwgInBlcmNlbnQubXQiKSwgbmNvbCA9IDMpCnBsb3QKCklkZW50cyhzZXUpIDwtICdzYW1wbGUnClZsblBsb3Qoc2V1LCBwdC5zaXplID0gMC4wMDEsIGZlYXR1cmVzID0gYygibkZlYXR1cmVfUk5BIikpClZsblBsb3Qoc2V1LCBwdC5zaXplID0gMC4wMDEsIGZlYXR1cmVzID0gIm5Db3VudF9STkEiKQpWbG5QbG90KHNldSwgcHQuc2l6ZSA9IDAuMDAxLCBmZWF0dXJlcyA9ICJwZXJjZW50Lm10IikKCgoKYGBgCgpBZGQgaW4gbGFiZWxzIGZvciBiYXRjaCBhbmQgZGlzZWFzZSBzdGF0dXMgYW5kIGxpbmUKCmBgYHtyfQojbGlicmFyeSgiQ2VsbHR5cGVSIikKIyBDZWxsdHlwZVIgbGlicmFyeSBpcyBhIGxpYnJhcnkgSSAoUmhhbGVuYSkgbWFkZSBmb3IgZmxvdyBjeXRvbWV0cnkgYnV0IHVzZXMgdGhlIHNldXJhdCBvYmplY3QgYW5kIEkgbWFkZSBhIHF1aWNrIGFkZCBhbm5vdGF0aW9ucyBmdW5jdGlvbi4KClNldXJhdF9QYXJzZTEyc2FtcGxlIDwtIHNldQoKIyBoZXJlIGlzIHRoZSBmdW5jdGlvbgphbm5vdGF0ZSA8LSBmdW5jdGlvbihzZXUsIGFubm90YXRpb25zLCB0b19sYWJlbCwgYW5ub3RhdGlvbl9uYW1lID0gIkNlbGxUeXBlIil7CiAgSWRlbnRzKHNldSkgPC0gdG9fbGFiZWwKICBuYW1lcyhhbm5vdGF0aW9ucykgPC0gbGV2ZWxzKHNldSkKICBzZXUgPC0gUmVuYW1lSWRlbnRzKHNldSwgYW5ub3RhdGlvbnMpCiAgc2V1IDwtIEFkZE1ldGFEYXRhKG9iamVjdD1zZXUsIG1ldGFkYXRhPUlkZW50cyhzZXUpLCBjb2wubmFtZSA9IGFubm90YXRpb25fbmFtZSkKCn0KCklkZW50cyhTZXVyYXRfUGFyc2UxMnNhbXBsZSkgPC0gInNhbXBsZSIKc2FtcGxlLmxldmVscyA8LSBsZXZlbHMoU2V1cmF0X1BhcnNlMTJzYW1wbGUpCiMgc2hvdWxkIGdpdmUgdGhlIG9yZGVyIG9mIHNhbXBsZQoKIyB0ZXN0ClNldXJhdF9QYXJzZTEyc2FtcGxlIDwtIGFubm90YXRlKFNldXJhdF9QYXJzZTEyc2FtcGxlLCBhbm5vdGF0aW9ucyA9IHNhbXBsZS5sZXZlbHMsIHRvX2xhYmVsID0gInNhbXBsZSIsYW5ub3RhdGlvbl9uYW1lID0gInNhbXBsZS50ZXN0IikKdGFibGUoU2V1cmF0X1BhcnNlMTJzYW1wbGUkc2FtcGxlLnRlc3QpCnRhYmxlKFNldXJhdF9QYXJzZTEyc2FtcGxlJHNhbXBsZSkKIyB0aGVzZSBtYXRjaAoKI2lucHV0IHZlY3RvciB3ZSBnb3QgZnJvbSB0aGUgc2V1cmF0IG9iamVjdAojIERlZmluZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZmlyc3QgcGFydCBvZiB0aGUgc3RyaW5nCnBhdHRlcm4gPC0gIl5bQS1aYS16XSsiCgojIFVzZSBnc3ViKCkgdG8gcmVwbGFjZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgc3RyaW5nIHdpdGggYW4gZW1wdHkgc3RyaW5nCnNhbXBsZS5sZXZlbHMubmV3IDwtIGdzdWIocGF0dGVybiwgIiIsIHNhbXBsZS5sZXZlbHMpCgojIEV4dHJhY3QgQjEsIEIyLCBCMyBmcm9tIG5ldyB2ZWN0b3IKYmF0Y2ggPC0gZ3N1YigiLipCIiwgIkIiLCBzYW1wbGUubGV2ZWxzLm5ldykKClNldXJhdF9QYXJzZTEyc2FtcGxlIDwtIGFubm90YXRlKFNldXJhdF9QYXJzZTEyc2FtcGxlLCBhbm5vdGF0aW9ucyA9IGJhdGNoLCB0b19sYWJlbCA9ICJzYW1wbGUiLGFubm90YXRpb25fbmFtZSA9ICJCYXRjaCIpCgp0YWJsZShTZXVyYXRfUGFyc2UxMnNhbXBsZSRCYXRjaCkKdGFibGUoU2V1cmF0X1BhcnNlMTJzYW1wbGUkQmF0Y2gsU2V1cmF0X1BhcnNlMTJzYW1wbGUkc2FtcGxlKQoKIyBhZGQgdGhlIGNlbGwgbGluZSBuYW1lCiMgc2FtcGxlIHZlY3RvciBpcyBzdGlsbCB0aGUgaW5wdXQgdmVjdG9yCiMgRGVmaW5lIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byByZW1vdmUgQjEsIEIyLCBhbmQgQjMKcGF0dGVybiA8LSAiQlsxLTNdJCIKCiMgVXNlIGdzdWIoKSB0byByZW1vdmUgQjEsIEIyLCBhbmQgQjMgZnJvbSBvcmlnaW5hbCB2ZWN0b3IKc2FtcGxlLmxldmVscy5uZXcgPC0gZ3N1YihwYXR0ZXJuLCAiIiwgc2FtcGxlLmxldmVscykKCiMgRXh0cmFjdCBzdGFydGluZyB2YWx1ZXMgZnJvbSBuZXcgdmVjdG9yCmlwc2NsaW5lIDwtIGdzdWIoIkJbMS0zXSQiLCAiIiwgc2FtcGxlLmxldmVscy5uZXcpCmlwc2NsaW5lCgpTZXVyYXRfUGFyc2UxMnNhbXBsZSA8LSBhbm5vdGF0ZShTZXVyYXRfUGFyc2UxMnNhbXBsZSwgYW5ub3RhdGlvbnMgPSBpcHNjbGluZSwgdG9fbGFiZWwgPSAic2FtcGxlIixhbm5vdGF0aW9uX25hbWUgPSAiSVBTQ19MaW5lIikKCnRhYmxlKFNldXJhdF9QYXJzZTEyc2FtcGxlJElQU0NfTGluZSkKdGFibGUoU2V1cmF0X1BhcnNlMTJzYW1wbGUkSVBTQ19MaW5lLFNldXJhdF9QYXJzZTEyc2FtcGxlJHNhbXBsZSkKCiMgYWRkIGRpc2Vhc2Ugc3RhdHVzCiMgd2UgbmVlZCB0byBrbm93IHRoZSBvcmRlciBvZiB0aGUgbGluZXMKCklkZW50cyhTZXVyYXRfUGFyc2UxMnNhbXBsZSkgPC0gIklQU0NfTGluZSIKbGluZS5sZXZlbHMgPC0gbGV2ZWxzKFNldXJhdF9QYXJzZTEyc2FtcGxlKQpsaW5lLmxldmVscwoKUERzdGF0dXMgPC0gYygiUEQiLCJQRCIsIkNvbiIsIkNvbiIpICAjIGlmIFREMDcgYW5kIDI5NjUgYXJlIFBEIGxpbmVzIGFuZCBURDIyIGFuZCAzNDQ4IGFyZSBjb250cm9sIGxpbmVzClNldXJhdF9QYXJzZTEyc2FtcGxlIDwtIGFubm90YXRlKFNldXJhdF9QYXJzZTEyc2FtcGxlLCBhbm5vdGF0aW9ucyA9IFBEc3RhdHVzLCB0b19sYWJlbCA9ICJJUFNDX0xpbmUiLGFubm90YXRpb25fbmFtZSA9ICJEaXNlYXNlU3RhdHVzIikKCnRhYmxlKFNldXJhdF9QYXJzZTEyc2FtcGxlJERpc2Vhc2VTdGF0dXMpCgogCnRhYmxlKFNldXJhdF9QYXJzZTEyc2FtcGxlJERpc2Vhc2VTdGF0dXMsU2V1cmF0X1BhcnNlMTJzYW1wbGUkSVBTQ19MaW5lKQoKdGFibGUoU2V1cmF0X1BhcnNlMTJzYW1wbGUkQmF0Y2gsU2V1cmF0X1BhcnNlMTJzYW1wbGUkSVBTQ19MaW5lKQoKCgoKYGBgCgoKU2F2ZSBpbmZvIApgYGB7cn0Kc2F2ZVJEUyhTZXVyYXRfUGFyc2UxMnNhbXBsZSwgIlBhcnNlMTJzYW1wbGU0bGluZXMzYmF0Y2hKdWx5Ny5SRFMiKQoKc2V1IDwtIFNldXJhdF9QYXJzZTEyc2FtcGxlCnJtKFNldXJhdF9QYXJzZTEyc2FtcGxlKQoKIyBwbG90cyBvZiBpbiBhIGRpZmZlcmVudCB3b3JrYm9vayBmb3IgdGhlIHByZSBhbGlnbmVkIGRhdGEKCmBgYAoKQWxpZ24gdGhlIGNlbGwgbGluZXMgYW5kIGJhdGNoZXMsIHdlIHdpbGwgYWxpZ24gYWNyb3NzIHRoZSAxMiBzYW1wbGVzCgpgYGB7cn0KIyBtYWtlIGEgbGlzdCBvZiBzZXVyYXQgb2JqZWN0cyBieSBvdXIgY2VsbCB0eXBlIHZhcmlhYmxlCnN1Ymxpc3QgPC0gU3BsaXRPYmplY3Qoc2V1LCBzcGxpdC5ieSA9ICJzYW1wbGUiKQojIG5vcm1hbGl6ZSBhbmQgZmluZCB2YXJpYWJsZSBmZWF0dXJlcwpmb3IgKGkgaW4gMTpsZW5ndGgoc3VibGlzdCkpewogIHN1Ymxpc3RbW2ldXSA8LSBOb3JtYWxpemVEYXRhKHN1Ymxpc3RbW2ldXSwgdmVyYm9zZSA9IEZBTFNFKQogIHN1Ymxpc3RbW2ldXSA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhzdWJsaXN0W1tpXV0sIHNlbGVjdGlvbi5tZXRob2QgPSAidnN0IikKfQojIENyZWF0ZSBhbiBlbXB0eSBTZXVyYXQgb2JqZWN0IHRvIHN0b3JlIHRoZSBpbnRlZ3JhdGVkIGRhdGEKIyBUYWtlIHRoZSBmaXJzdCBTZXVyYXQgb2JqZWN0IGZyb20gdGhlIGxpc3QgYXMgdGhlIHN0YXJ0aW5nIHBvaW50CmludGVncmF0ZWRfc2V1cmF0IDwtIHN1YnNldChzdWJsaXN0W1sxXV0pCgoKIyBJdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgU2V1cmF0IG9iamVjdHMKZm9yIChpIGluIDE6bGVuZ3RoKHN1Ymxpc3QpKSB7CiAgIyBSZW5hbWUgdGhlICdvcmlnLmlkZW50JyBtZXRhZGF0YSBpbnNpZGUgdGhlIHNldXJhdCBvYmplY3QgdG8gbWF0Y2ggdGhlIG9iamVjdCBuYW1lIGluIHRoZSBsaXN0CiAgc3VibGlzdFtbaV1dJG9yaWcuaWRlbnQgPC0gbmFtZXMoc3VibGlzdClbaV0KCn0KCnNhbXBsZS5saXN0IDwtIHN1Ymxpc3QKZm9yIChpIGluIDE6bGVuZ3RoKHNhbXBsZS5saXN0KSkgewogICMgTm9ybWFsaXplIGFuZCBzY2FsZSB0aGUgZGF0YQogIHNhbXBsZS5saXN0W1tpXV0gPC0gTm9ybWFsaXplRGF0YShzYW1wbGUubGlzdFtbaV1dLCB2ZXJib3NlID0gRkFMU0UpCiAgc2FtcGxlLmxpc3RbW2ldXSA8LSBTY2FsZURhdGEoc2FtcGxlLmxpc3RbW2ldXSwgdmVyYm9zZSA9IEZBTFNFKQogICMgRmluZCB2YXJpYWJsZSBmZWF0dXJlcwogIHNhbXBsZS5saXN0W1tpXV0gPC0gRmluZFZhcmlhYmxlRmVhdHVyZXMoc2FtcGxlLmxpc3RbW2ldXSwgc2VsZWN0aW9uLm1ldGhvZCA9ICJ2c3QiKQogICMgR2V0IHRoZSB2YXJpYWJsZSBmZWF0dXJlcwogIHZhcmlhYmxlX2ZlYXR1cmVzIDwtIFZhcmlhYmxlRmVhdHVyZXMoc2FtcGxlLmxpc3RbW2ldXSkKICAjIFJ1biBQQ0Egd2l0aCB0aGUgdmFyaWFibGUgZmVhdHVyZXMKICBzYW1wbGUubGlzdFtbaV1dIDwtIFJ1blBDQShzYW1wbGUubGlzdFtbaV1dLCB2ZXJib3NlID0gRkFMU0UsIG5wY3MgPSAzMCwgZmVhdHVyZXMgPSB2YXJpYWJsZV9mZWF0dXJlcykKfQoKaW50LmFuY2hvcnMgPC0gRmluZEludGVncmF0aW9uQW5jaG9ycyhvYmplY3QubGlzdCA9IHNhbXBsZS5saXN0LCBkaW1zID0gMTozMCwgcmVkdWN0aW9uID0gInJwY2EiKQppbnRlZ3JhdGVkX3NldXJhdCA8LSBJbnRlZ3JhdGVEYXRhKGFuY2hvcnNldCA9IGludC5hbmNob3JzLCAgZGltcyA9IDE6MzApCiMgCiMgbXVzdCBzZXQgdGhlIGsgd2VpZ2h0IHRvIHRoZSBsb3dlc3QgY2VsbCBjb3VudCAKIyBpbiB0aGUgcGFyc2Ugc2FtcGxlIHdlIGhhdmUgb3ZlciAxNTMwIGNlbGxzIGluIHRoZSBzbWFsbGVzdCBjb3VudCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoYW5nZSB0aGUgayBmcm9tIHRoZSAxMDAgZGVmYXVsdAoKCgoKYGBgCgoKTm93IHdlIG5lZWQgdG8gcnVuIHRoZSB3b3JrZmxvdyBvbiB0aGUgaW50ZWdyYXRlZCBvYmplY3QKCmBgYHtyfQpEZWZhdWx0QXNzYXkoaW50ZWdyYXRlZF9zZXVyYXQpIDwtICJpbnRlZ3JhdGVkIgppbnRlZ3JhdGVkX3NldXJhdCA8LSBTY2FsZURhdGEoaW50ZWdyYXRlZF9zZXVyYXQsIHZlcmJvc2UgPSBGQUxTRSkKIyBvbmx5IHRoZSBpbnRlZ3JhdGVkIGZlYXR1cmVzIHdpbGwgYmUgdGhlIHBjYSBpbnB1dAoKaW50ZWdyYXRlZF9zZXVyYXQgPC0gUnVuUENBKGludGVncmF0ZWRfc2V1cmF0LCBucGNzID0gMjAsIHZlcmJvc2UgPSBGQUxTRSkKaW50ZWdyYXRlZF9zZXVyYXQgPC0gUnVuVU1BUChpbnRlZ3JhdGVkX3NldXJhdCwgcmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjIwLCBuLm5laWdoYm9ycyA9IDgxKQoKYGBgCgpIYXZlIGEgbG9vayBhdCB0aGUgbmV3IFVNQVAKCmBgYHtyfQpEaW1QbG90KGludGVncmF0ZWRfc2V1cmF0LCBncm91cC5ieSA9ICdzYW1wbGUnKQpEaW1QbG90KGludGVncmF0ZWRfc2V1cmF0LCBncm91cC5ieSA9ICdCYXRjaCcpCkRpbVBsb3QoaW50ZWdyYXRlZF9zZXVyYXQsIGdyb3VwLmJ5ID0gJ0Rpc2Vhc2VTdGF0dXMnKQpEaW1QbG90KGludGVncmF0ZWRfc2V1cmF0LCBncm91cC5ieSA9ICdJUFNDX0xpbmUnKQoKCgpgYGAKCmBgYHtyfQojIHNhdmVSRFMoaW50ZWdyYXRlZF9zZXVyYXQsICJJbnRlZ3JhdGVkMTJzYW1wbGVzLlJEUyIpCiMgc2V0d2QoIn4vRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvUGFyc2VFeGFtcGxlL0V4cGVyaW1lbnQxLW1pbmkxMiIpCmludGVncmF0ZWRfc2V1cmF0IDwtIHJlYWRSRFMoIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL1BhcnNlRXhhbXBsZS9FeHBlcmltZW50MS1taW5pMTIvSW50ZWdyYXRlZDEyc2FtcGxlcy5SRFMiKQoKYGBgCgpGaW5kIG5ldyBjbHVzdGVycwoKYGBge3J9CkRlZmF1bHRBc3NheShpbnRlZ3JhdGVkX3NldXJhdCkgPC0gImludGVncmF0ZWQiCmludGVncmF0ZWRfc2V1cmF0IDwtIEZpbmROZWlnaGJvcnMoaW50ZWdyYXRlZF9zZXVyYXQsIGRpbXMgPSAxOjIwLCBrLnBhcmFtID0gODEpCmludGVncmF0ZWRfc2V1cmF0IDwtIEZpbmRDbHVzdGVycyhpbnRlZ3JhdGVkX3NldXJhdCwgcmVzb2x1dGlvbiA9IGMoMCwwLjMsMC42LDEpICkKCmBgYAoKYGBge3J9CmxpYnJhcnkoY2x1c3RyZWUpCmNsdXN0cmVlKGludGVncmF0ZWRfc2V1cmF0KQoKCmBgYAoKYGBge3J9CgpEaW1QbG90KGludGVncmF0ZWRfc2V1cmF0LCBncm91cC5ieSA9ICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4zIikKRGltUGxvdChpbnRlZ3JhdGVkX3NldXJhdCwgZ3JvdXAuYnkgPSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuNiIpCgpgYGAKCgoKCkFubm90YXRlIGNsdXN0ZXJzIHJlcyAwLjMKCmBgYHtyfQoKSWRlbnRzKGludGVncmF0ZWRfc2V1cmF0KSA8LSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIKQ2x1c3Rlck1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMoaW50ZWdyYXRlZF9zZXVyYXQsIG9ubHkucG9zID0gVFJVRSkKCmBgYAoKCgpgYGB7cn0KbGlicmFyeShlbnJpY2hSKQpzZXRFbnJpY2hyU2l0ZSgiRW5yaWNociIpICMgSHVtYW4gZ2VuZXMKIyBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzCiMgZ2V0IHRoZSBwb3NzaWJsZSBsaWJyYXJpZXMKZGJzIDwtIGxpc3RFbnJpY2hyRGJzKCkKCiMgdGhpcyB3aWxsIGxpc3QgdGhlIHBvc3NpYmxlIGxpYnJhcmllcwpkYnMKCiMgc2VsZWN0IGxpYnJhcmllcyB3aXRoIGNlbGwgdHlwZXMKZGIgPC0gYygnQ2VsbE1hcmtlcl9BdWdtZW50ZWRfMjAyMScsJ0F6aW11dGhfQ2VsbF9UeXBlc18yMDIxJykKCiMgZnVuY3Rpb24gZm9yIGEgcXVpY2sgbG9vawpjaGVja0NlbGx0eXBlcyA8LSBmdW5jdGlvbihjbHVzdGVyX251bSA9IDApewogIGNsdXN0ZXJYIDwtIENsdXN0ZXJNYXJrZXJzICU+JSBmaWx0ZXIoY2x1c3RlciA9PSBjbHVzdGVyX251bSAmIGF2Z19sb2cyRkMgPiAwLjI1KQogIGdlbmVzIDwtIGNsdXN0ZXJYJGdlbmUKICAjIHRoZSBjZWxsIHR5cGUgbGlicmFyaWVzCiAgIyBnZXQgdGhlIHJlc3VsdHMgZm9yIGVhY2ggbGlicmFyeQogIGNsdXN0ZXJYLmNlbGwgPC0gZW5yaWNocihnZW5lcywgZGF0YWJhc2VzID0gZGIpCiAgIyB2aXN1YWxpemUgdGhlIHJlc3VsdHMKcHJpbnQocGxvdEVucmljaChjbHVzdGVyWC5jZWxsW1sxXV0sIHNob3dUZXJtcyA9IDIwLCBudW1DaGFyID0gNDAsIHkgPSAiQ291bnQiLCBvcmRlckJ5ID0gIlAudmFsdWUiLCB0aXRsZSA9ICdDZWxsTWFya2VyX0F1Z21lbnRlZF8yMDIxJykpCnByaW50KHBsb3RFbnJpY2goY2x1c3RlclguY2VsbFtbMl1dLCBzaG93VGVybXMgPSAyMCwgbnVtQ2hhciA9IDQwLCB5ID0gIkNvdW50Iiwgb3JkZXJCeSA9ICJQLnZhbHVlIiwgdGl0bGUgPSAnQXppbXV0aF9DZWxsX1R5cGVzXzIwMjEnKSkKCn0KCmBgYApDaGVjayBlYWNoIGNsdXN0ZXIgcXVpY2tseQoKYGBge3J9CmNoZWNrQ2VsbHR5cGVzKGNsdXN0ZXJfbnVtID0gOSkKCmBgYAoKTG9vayBhdCBzb21lIGV4cHJlc3Npb24gbGlzdHMKCmBgYHtyfQoKZGFfbmV1cm9ucyA8LSBjKCJUSCIsIlNMQzZBMyIsIlNMQzE4QTIiLCJTT1g2IiwiTkRORiIsIlNOQ0ciLCJBTERIMUExIiwiQ0FMQjEiLCJUQUNSMiIsIlNMQzE3QTYiLCJTTEMzMkExIiwiT1RYMiIsIkdSUCIsIkxQTCIsIkNDSyIsIlZJUCIpCk5QQ19vclN0ZW1MaWtlIDwtIGMoIkRDWCIsIk5FVVJPRDEiLCJUQlIxIiwiUENOQSIsIk1LSTY3IiwiU09YMiIsIk5FUyIsIlBBWDYiLCJNQVNIMSIpCm1hdHVyZV9uZXVyb25zID0gYygiUkJGT1gzIiwiU1lQIiwiRExHNDUiLCJWQU1QMSIsIlZBTVAyIiwiVFVCQjMiLCJTWVQxIiwiQlNOIiwiSE9NRVIxIiwiU0xDMTdBNiIpCmV4Y2l0YXRvcnlfbmV1cm9ucyA9IGMoIkdSSUEyIiwiR1JJQTEiLCJHUklBNCIsIkdSSU4xIiwiR1JJTjJCIiwiR1JJTjJBIiwiR1JJTjNBIiwiR1JJTjMiLCJHUklQMSIsIkNBTUsyQSIpCmluaGJpdG9yeV9uZXVyb25zID0gaW5oID0gYygiR0FEMSIsIkdBRDIiLCAiR0FUMSIsIlBWQUxCIiwiR0FCUjIiLCJHQUJSMSIsIkdCUlIxIiwiR0FCUkIyIiwiR0FCUkIxIiwiR0FCUkIzIiwiR0FCUkE2IiwiR0FCUkExIiwiR0FCUkE0IiwiVFJBSzIiKQphc3Ryb2N5dGVzIDwtIGMoIkdGQVAiLCJTMTAwQiIsIkFRUDQiLCJBUE9FIiwgIlNPWDkiLCJTTEMxQTMiKQpvbGlnb2RlbmRyb2N5dGVzIDwtIGMoIk1CUCIsIk1PRyIsIk9MSUcxIiwiT0xJRzIiLCJTT1gxMCIpCm9wYyA8LSAKcmFkaWFsX2dsaWEgPC0gYygiUFRQUkMiLCJBSUYxIiwiQURHUkUxIiwgIlZJTSIsICJUTkMiLCJQVFBSWjEiLCJGQU0xMDdBIiwiSE9QWCIsIkxJRlIiLAogICAgICAgICAgICAgICJJVEdCNSIsIklMNlNUIiwiU0xDMUEzIikKZXBpdGhlbGlhbCA8LSBjKCJIRVMxIiwiSEVTNSIsIlNPWDIiLCJTT1gxMCIsIk5FUyIsIkNESDEiLCJOT1RDSDEiKQoKbWljcm9nbGlhIDwtIGMoIklCQTEiLCJQMlJZMTIiLCJQMlJZMTMiLCJUUkVNMTE5IiwgIkdQUjM0IiwiU0lHTEVDSCIsIlRSRU0yIiwKICAgICAgICAgICAgICAgIkNYM0NSMSIsIkZDUkxTIiwiT0xGTUwzIiwiSEVYQiIsIlRHRkJSMSIsICJTQUxMMSIsIk1FUlRLIiwKICAgICAgICAgICAgICAgIlBST1MxIikKCmZlYXR1cmVzX2xpc3QgPC0gYygiTUtJNjciLCJTT1gyIiwiUE9VNUYxIiwiRExYMiIsIlBBWDYiLCJTT1g5IiwiSEVTMSIsIk5FUyIsIlJCRk9YMyIsIk1BUDIiLCJOQ0FNMSIsIkNEMjQiLCJHUklBMiIsIkdSSU4yQiIsIkdBQkJSMSIsIkdBRDEiLCJHQUQyIiwiR0FCUkExIiwiR0FCUkIyIiwiVEgiLCJBTERIMUExIiwiTE1YMUIiLCJOUjRBMiIsIkNPUklOIiwiQ0FMQjEiLCJLQ05KNiIsIkNYQ1I0IiwiSVRHQTYiLCJTTEMxQTMiLCJDRDQ0IiwiQVFQNCIsIlMxMDBCIiwgIlBER0ZSQSIsIk9MSUcyIiwiTUJQIiwiQ0xETjExIiwiVklNIiwiVkNBTTEiKQoKc2hvcnRfbGlzdCA8LSBjKCJNS0k2NyIsIlNPWDkiLCJIRVMxIiwiTkVTIiwiRExYMiIsIlJCRk9YMyIsIk1BUDIiLCJUSCIsIkNBTEIxIiwiS0NOSjYiLCJTTEMxQTMiLCJDRDQ0IiwiQVFQNCIsIlMxMDBCIiwiT0xJRzIiLCJNQlAiLCJWSU0iKQoKYGBgCgoKYGBge3J9CklkZW50cyhpbnRlZ3JhdGVkX3NldXJhdCkgPC0gImludGVncmF0ZWRfc25uX3Jlcy4wLjMiCgpmb3IgKGkgaW4gZGFfbmV1cm9ucykgewogIHByaW50KEZlYXR1cmVQbG90KGludGVncmF0ZWRfc2V1cmF0LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KCmBgYAoKYGBge3J9CklkZW50cyhpbnRlZ3JhdGVkX3NldXJhdCkgPC0gImludGVncmF0ZWRfc25uX3Jlcy4wLjMiCgpmb3IgKGkgaW4gTlBDX29yU3RlbUxpa2UpIHsKICBwcmludChGZWF0dXJlUGxvdChpbnRlZ3JhdGVkX3NldXJhdCwgZmVhdHVyZXMgPSBpLCBtaW4uY3V0b2ZmID0gJ3ExJywgbWF4LmN1dG9mZiA9ICdxOTcnLCBsYWJlbCA9IFRSVUUpKQp9CmBgYAoKYGBge3J9CklkZW50cyhpbnRlZ3JhdGVkX3NldXJhdCkgPC0gImludGVncmF0ZWRfc25uX3Jlcy4wLjMiCgpmb3IgKGkgaW4gYXN0cm9jeXRlcykgewogIHByaW50KEZlYXR1cmVQbG90KGludGVncmF0ZWRfc2V1cmF0LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KYGBgCgpgYGB7cn0KSWRlbnRzKGludGVncmF0ZWRfc2V1cmF0KSA8LSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIKCmZvciAoaSBpbiByYWRpYWxfZ2xpYSkgewogIHByaW50KEZlYXR1cmVQbG90KGludGVncmF0ZWRfc2V1cmF0LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KCmBgYAoKCmBgYHtyfQpJZGVudHMoaW50ZWdyYXRlZF9zZXVyYXQpIDwtICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4zIgoKZm9yIChpIGluIG1hdHVyZV9uZXVyb25zKSB7CiAgcHJpbnQoRmVhdHVyZVBsb3QoaW50ZWdyYXRlZF9zZXVyYXQsIGZlYXR1cmVzID0gaSwgbWluLmN1dG9mZiA9ICdxMScsIG1heC5jdXRvZmYgPSAncTk3JywgbGFiZWwgPSBUUlVFKSkKfQoKCmBgYAoKYGBge3J9CgpJZGVudHMoaW50ZWdyYXRlZF9zZXVyYXQpIDwtICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4zIgoKZm9yIChpIGluIGV4Y2l0YXRvcnlfbmV1cm9ucykgewogIHByaW50KEZlYXR1cmVQbG90KGludGVncmF0ZWRfc2V1cmF0LCBmZWF0dXJlcyA9IGksIG1pbi5jdXRvZmYgPSAncTEnLCBtYXguY3V0b2ZmID0gJ3E5NycsIGxhYmVsID0gVFJVRSkpCn0KCgpgYGAKQWRkIGFubm90YXRpb25zIC0gZmlyc3QgcGFzcwpOUEMtc3RlbQpOUEMtZ2xpYQpOUEMtU09YNgpOZXVyb25zLUdsdXQKUHJvZ2VuaXRvcnMtZGl2Ck5QQy1TT1gyLU9YVC1maWJybwpOZXVyYWwtU3RlbQpzdGVtIGNlbGwKTmV1cm9uLUdBQkEKTmV1cm9uLWVwaXRoZWxpYWwKCmBgYHtyfQpjZWxsdHlwZXMxIDwtIGMoIk5QQy1zdGVtIiwiTlBDLWdsaWEiLCJOUEMtU09YNiIsIk5ldXJvbnMtR2x1dCIsIlByb2dlbml0b3JzLWRpdiIsCiAgICAgICAgICAgICAgICAiTlBDLWZpYnJvIiwiTmV1cmFsLVN0ZW0iLCJTdGVtIiwiTmV1cm9ucy1HQUJBIiwiTmV1cmFsLWVwaSIpICAKaW50ZWdyYXRlZF9zZXVyYXQgPC0gYW5ub3RhdGUoaW50ZWdyYXRlZF9zZXVyYXQsIGFubm90YXRpb25zID0gY2VsbHR5cGVzMSwgdG9fbGFiZWwgPSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIsYW5ub3RhdGlvbl9uYW1lID0gIkNlbGx0eXBlczEiKQoKRGltUGxvdChpbnRlZ3JhdGVkX3NldXJhdCwgbGFiZWwgPSBUUlVFKQoKYGBgCgpgYGB7cn0KCmNlbGx0eXBlczIgPC0gYygiTlBDIiwiTlBDIiwiTlBDIiwiTmV1cm9ucyIsIlByb2dlbml0b3JzIiwKICAgICAgICAgICAgICAgICJOUEMiLCJOUEMiLCJTdGVtIiwiTmV1cm9ucyIsIkVwaXRoZWxpYWwiKSAgCmludGVncmF0ZWRfc2V1cmF0IDwtIGFubm90YXRlKGludGVncmF0ZWRfc2V1cmF0LCBhbm5vdGF0aW9ucyA9IGNlbGx0eXBlczIsIHRvX2xhYmVsID0gImludGVncmF0ZWRfc25uX3Jlcy4wLjMiLGFubm90YXRpb25fbmFtZSA9ICJDZWxsdHlwZXMyIikKCkRpbVBsb3QoaW50ZWdyYXRlZF9zZXVyYXQsIGxhYmVsID0gVFJVRSkKCmBgYAoKYGBge3J9CgoKRGltUGxvdChpbnRlZ3JhdGVkX3NldXJhdCwgc3BsaXQuYnkgPSAiRGlzZWFzZVN0YXR1cyIpCkRpbVBsb3QoaW50ZWdyYXRlZF9zZXVyYXQsIHNwbGl0LmJ5ID0gIkRpc2Vhc2VTdGF0dXMiLCBncm91cC5ieSA9ICJDZWxsdHlwZXMxIikKCgpgYGAKCmBgYHtyfQpjZWxsdHlwZXMzIDwtIGMoIk5QQyIsIk5QQyIsIk5QQyIsIk5ldXJvbnMiLCJOUEMtZGl2IiwKICAgICAgICAgICAgICAgICJOZXVyby1OUEMiLCJOZXVyYWwtU3RlbSIsIlN0ZW0iLCJOZXVyb25zIiwiTmV1cmFsLWVwaSIpICAKaW50ZWdyYXRlZF9zZXVyYXQgPC0gYW5ub3RhdGUoaW50ZWdyYXRlZF9zZXVyYXQsIGFubm90YXRpb25zID0gY2VsbHR5cGVzMywgdG9fbGFiZWwgPSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuMyIsYW5ub3RhdGlvbl9uYW1lID0gIkNlbGx0eXBlczMiKQoKRGltUGxvdChpbnRlZ3JhdGVkX3NldXJhdCwgbGFiZWwgPSBUUlVFKQpgYGAKCkRFRyBpbiBjZWxsIHR5cGVzIDMgZ3JvdXBzCgpgYGB7cn0KSWRlbnRzKGludGVncmF0ZWRfc2V1cmF0KSA8LSAiQ2VsbHR5cGVzMyIKc2V1X3N1YiA8LSBzdWJzZXQoaW50ZWdyYXRlZF9zZXVyYXQsIGlkZW50cyA9ICJOZXVyb25zIikKc2V1X3N1YiA8LSBTY2FsZURhdGEoc2V1X3N1YikKc2V1X3N1YiA8LSBOb3JtYWxpemVEYXRhKHNldV9zdWIpCgpEaW1QbG90KHNldV9zdWIsIGdyb3VwLmJ5ID0gIkRpc2Vhc2VTdGF0dXMiKQoKYGBgCgoKCgoKCg==